const { body,param, validationResult } = require("express-validator");
// 新增文章分类校验
const addArticleRules = () => [
  // 名称校验
  body("name")
    .notEmpty().withMessage("分类名称不能为空").bail()
    .isString().withMessage("分类名称必须是字符串").bail()
    .isLength({ min: 2, max: 20 }).withMessage("分类名称长度需在2-20个字符之间"),
    
  // 别名校验
  body("alias")
    .notEmpty().withMessage("分类别名不能为空").bail()
    .isString().withMessage("分类别名必须是字符串").bail()
    .matches(/^[a-zA-Z0-9]+$/)
    .withMessage("分类别名只能包含字母和数字")
];

// 删除分类校验
const deleteArticleRules = () => [
  param("id") // 使用 param 而不是 body
    .notEmpty().withMessage('id不能为空').bail()
    .isInt({ min: 1 }).withMessage('id必须是大于0的整数').bail()
    .toInt() // 将字符串转换为整数
];
const updateCateRules = () => [
  body("id")
    .notEmpty().withMessage('ID不能为空').bail()
    .isInt({ min: 1 }).withMessage('ID必须是大于0的整数').bail()
    .toInt(),
    
  body("name")
    .notEmpty().withMessage("分类名称不能为空").bail()
    .isString().withMessage("分类名称必须是字符串").bail()
    .isLength({ min: 2, max: 20 }).withMessage("分类名称长度需在2-20个字符之间"),
    
  body("alias")
    .notEmpty().withMessage("分类别名不能为空").bail()
    .isString().withMessage("分类别名必须是字符串").bail()
    .matches(/^[a-zA-Z0-9]+$/)
    .withMessage("分类别名只能包含字母和数字")
];

// 错误处理中间件
const validate = (req, res, next) => {
  const errors = validationResult(req);

  if (errors.isEmpty()) {
    return next();
  }

  const firstError = errors.array()[0];

  return res.status(400).json({
    status: 1,
    message: firstError.msg,
  });
};


module.exports = {
  addArticleRules,
  deleteArticleRules,
  updateCateRules,
  validate
};